﻿using System.Collections.Generic;


namespace FlyIL.Trace;



public static partial class Tracer
{



    /*
     * ftp://note 只是跟踪到 运算起点 , 就很有难度 
     * 
     * 极端情况1   , 即 push 0x66666666, push 0x88888888
     * cmp eax , -> 66668888  这种情况  
     * 即 由一个 跟踪数 , 变为 两个跟踪数 
     * 
     * 
     * 
     * 极端情况2     mov [rsp+rdx-51F25F7Eh],rax
     * 将栈内变量 ， 伪装成 堆访问
     * 这样就 很难 跟踪栈内变量了 
     * 
     * 
     * 要想 将代码, 跟踪为分支 , 几乎是不可能的 
     * 
     */





    /// <summary>
    /// !!! 线性设计
    /// 解析 IL 指令, 跟踪特定的操作数, 到赋值初始节点
    /// 
    /// 难点, 要分析 栈的出入情况 
    /// 要做精简 ，则需要对栈进行重新 校对, 放弃了
    /// </summary>


    public static Inst TraceUp(this Context vcontext, Inst it0, Operand target)
    {

        TraceCore traceExp = new(vcontext, it0, target);

        /// 之里仅仅是 最原始的  表达式 ， 需要修饰和调整 
        var Main = traceExp.Trace(null);


        if (Main != null && Main.Calculable)
        {
            return traceExp.Last;
        }

        return null;
    }


}
